package com.tinet.sistReserva.DAO;

import java.util.ArrayList;

import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;

import com.tinet.sistReserva.model.Sala;

/**
 * 
 * Clase que implementa los metodos de la interfaz InterfazSalaBean.
 * 
 * @author Frmancil
 */
public class SalaDao implements InterfazSalaDao {
    /**
     * Manejador de entidad.
     */
    private EntityManager emSala;

    /**
     * Constructor que inicializa el manejador de entidad em para cada objeto
     * SalaDao creado.
     * 
     * @param emSala
     *            Manejador de entidad.
     * 
     */
    public SalaDao(EntityManager emSala) {
        this.emSala = emSala;
    }

    /**
     * {@inheritDoc}
     */
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void agregar(Sala nuevaSala) {
        emSala.persist(nuevaSala);

    }

    /**
     * {@inheritDoc}
     */
    public void eliminar(Sala salaAEliminar) {
        if (buscar(salaAEliminar) != null) {
            emSala.remove(buscar(salaAEliminar));
        }

    }

    /**
     * {@inheritDoc}
     */
    public void actualizar(Sala salaAActualizar) {
        if (buscar(salaAActualizar) != null) {
            emSala.merge(salaAActualizar);
        }

    }

    /**
     * {@inheritDoc}
     */
    public Sala buscar(Sala salaABuscar) {
        return (Sala) emSala
                .createQuery("SELECT S FROM Sala S WHERE S.id_sala=:id_sala")
                .setParameter("id_sala", salaABuscar.getId_sala())
                .getSingleResult();
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public ArrayList<Sala> listar() {
        return (ArrayList<Sala>) emSala.createQuery("SELECT S FROM Sala S")
                .getResultList();
    }

}
